package com.zenithmind.mall.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.mall.pojo.query.OrderQuery;
import com.zenithmind.mall.pojo.vo.OrderVO;

/**
 * 订单查询服务接口 - 遵循接口隔离原则，专门负责订单查询操作
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
public interface OrderQueryService {

    /**
     * 分页查询订单列表
     * 
     * @param query 查询条件
     * @return 订单列表
     */
    PageResult<OrderVO> getOrderPage(OrderQuery query);

    /**
     * 根据ID查询订单详情
     * 
     * @param id 订单ID
     * @param userId 用户ID（用于权限验证）
     * @return 订单详情
     */
    OrderVO getOrderById(String id, String userId);

    /**
     * 根据订单号查询订单详情
     * 
     * @param orderNo 订单号
     * @param userId 用户ID（用于权限验证）
     * @return 订单详情
     */
    OrderVO getOrderByNo(String orderNo, String userId);

    /**
     * 查询用户订单统计
     * 
     * @param userId 用户ID
     * @return 订单统计
     */
    Object getOrderStatistics(String userId);

    /**
     * 查询用户各状态订单数量
     * 
     * @param userId 用户ID
     * @return 各状态订单数量
     */
    Object getOrderStatusCount(String userId);

    /**
     * 查询用户最近订单
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 最近订单列表
     */
    java.util.List<OrderVO> getRecentOrders(String userId, Integer limit);

    /**
     * 根据商品ID查询相关订单
     * 
     * @param productId 商品ID
     * @param userId 用户ID
     * @return 相关订单列表
     */
    java.util.List<OrderVO> getOrdersByProduct(String productId, String userId);
}
